package collection;

public abstract class ACompleteBinTree<E> extends ABinTree<BinTreeNodeWithIndex<E>, E> {

	public ACompleteBinTree(){};
	
	@Override
	public abstract BinTreeNodeWithIndex<E> getParent(BinTreeNodeWithIndex<E> someNode);

	@Override
	public abstract boolean hasLeftChild(BinTreeNodeWithIndex<E> someNode);

	@Override
	public abstract boolean hasRightChild(BinTreeNodeWithIndex<E> someNode);

	@Override
	public abstract BinTreeNodeWithIndex<E> getLeftChild(BinTreeNodeWithIndex<E> someNode);

	@Override
	public abstract BinTreeNodeWithIndex<E> getRightChild(BinTreeNodeWithIndex<E> someNode);

	@Override
	public abstract void addLeftChildElement(BinTreeNodeWithIndex<E> someNode, E element);

	@Override
	public abstract void addRightChildElement(BinTreeNodeWithIndex<E> someNode, E element);
	
	public abstract void addElement(E element);
	
	public abstract BinTreeNodeWithIndex<E> removeLast();

}
